<?php

namespace App\Services\Common;

use Illuminate\Support\Facades\Redis;

class SnCode
{

    /**
     * 不同的单子的类型，设置不同的计数
     *
     * @param [type] $prefix,订单前缀
     * @return string
     */
    public static function getSnCode($prefix)
    {
        $date = date('Ymd'); //日期前缀
        if (Redis::exists($date . $prefix)) {
            $key_num = Redis::incr($date . $prefix);
        } else {
            Redis::set($date . $prefix, 1);
            $key_num = 1;
        }
        $yesterdayDate = date('Ymd', time() - 86400 * 2);
        if (Redis::exists($yesterdayDate . $prefix)) {
            Redis::del($yesterdayDate . $prefix);
        }
        return $prefix . $date . str_pad($key_num, 5, '0', STR_PAD_LEFT);
    }

    /**
     * 订单、协议等需要使用单据编号的地方，创建或生成失败，计数回退
     */
    public static function rollBackSnCode($prefix)
    {
        $date = date('Ymd'); //日期前缀
        Redis::decr($date . $prefix);
    }
}
